<?php
class M_cliente extends CI_Model {
	function _construct(){
		//Call the Model constructor
		parent::_construct();
	}
	
	//Este metodo se utiliza cuando queremos obtener los clientes existentes tanto activos como inactivos, pero no los borrados (-1)
	function buscar($restriccion=null){
		$consulta = $this->db->query("SELECT cliente.*, (SELECT COUNT(idPublicacion) FROM publicacion WHERE cliente.idCliente=publicacion.idCliente AND publicacion.estado=1) AS cantPublicaciones,
											 DATE_FORMAT(cliente.fechaCreacion,'%d/%m/%Y %H:%i:%s') AS fechaCreacionFormateada, 
											 DATE_FORMAT(cliente.fechaUltimaModificacion,'%d/%m/%Y %H:%i:%s') AS fechaUltimaModificacionFormateada
									  FROM cliente
									  WHERE cliente.estado<>-1 $restriccion
									  ORDER BY cliente.apellido ASC, cliente.nombre ASC");
		return($consulta);
	}
	
	//Este metodo se utiliza cuando queremos obtener los clientes activos existentes	
	function buscarActivos($restriccion=null){
		$consulta = $this->db->query("SELECT cliente.* 
									  FROM cliente
									  WHERE cliente.estado=1 $restriccion
									  ORDER BY cliente.apellido ASC, cliente.nombre ASC");
		return($consulta);
	}
	
	//Este metodo se utiliza para eliminar un cliente
	function eliminar($idCliente=null, $idDestructor=null){
		$consulta = $this->db->query("UPDATE `cliente` 
									 SET `estado` = -1,
										 `idDestructor` = ". $this->db->escape($idDestructor) ."
							         WHERE `cliente`.`idCliente` = " . $this->db->escape($idCliente) . " LIMIT 1");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza para crear un cliente
	function crear($hash=null, $apellido=null, $nombre=null, $dni=null, $sexo=null, $empresa=null, $pais=null, $provincia=null, $localidad=null, $direccion=null, $email=null, $emailAlternativo=null, $emailFacebook=null, $telefono=null, $facebook=null, $twitter=null, $observaciones=null, $estado=null, $idCreador=null){
		$this->db->query("INSERT INTO `cliente` (`idCliente`, `hash`, `apellido`, `nombre`, `dni`, `sexo`, `empresa`, `pais`, `provincia`, `localidad`, `direccion`, `email`, `emailAlternativo`, `emailFacebook`, `telefono`, `facebook`, `twitter`, `observaciones`, `fechaCreacion`, `estado`, `idCreador`) VALUES 
											     (NULL,".$this->db->escape($hash).",".$this->db->escape($apellido).",".$this->db->escape($nombre).",".$this->db->escape($dni).",".$this->db->escape($sexo).",".$this->db->escape($empresa).",".$this->db->escape($pais).",".$this->db->escape($provincia).",".$this->db->escape($localidad).",".$this->db->escape($direccion).",".$this->db->escape($email).",".$this->db->escape($emailAlternativo).",".$this->db->escape($emailFacebook).",".$this->db->escape($telefono).",".$this->db->escape($facebook).",".$this->db->escape($twitter).",".$this->db->escape($observaciones).",now(),".$this->db->escape($estado).",".$this->db->escape($idCreador).")");
		return($this->db->affected_rows());
	}
	
	//Este metodo se utiliza cuando queremos devolver un cliente en particular usado generalmente en el formulario de modificar
	function get($idCliente=null){
		$consulta = $this->db->query("SELECT cliente.*
									  FROM cliente
									  WHERE cliente.estado<>-1 AND cliente.idCliente=".$this->db->escape($idCliente)."
									  LIMIT 1");
		return($consulta);
	}
	
	//Este metodo se utiliza cuando queremos devolver un cliente en particular segun el hash y no el id. Se utiliza para generar el XML
	function getPorHash($hash=null){
		$consulta = $this->db->query("SELECT cliente.*
									  FROM cliente
									  WHERE cliente.estado<>-1 AND cliente.hash=".$this->db->escape($hash)."
									  LIMIT 1");
		return($consulta);
	}
	
	//Este metodo se utiliza cuando queremos devolver un cliente anterior o siguiente a uno en particular 
	function getContiguo($idCliente=null, $cant=null){
		do{			
			$idCliente+=$cant;
			$consulta = $this->db->query("SELECT *
										  FROM cliente
										  WHERE idCliente=".$this->db->escape($idCliente)."
										  LIMIT 1");
			if($consulta->num_rows == 0)
				return(0);
			
		}while($consulta->row()->estado=='-1');
		
		return($consulta->row()->idCliente);
	}
	
	//Este metodo se utiliza para modificar un cliente
	function modificar($idCliente=null, $apellido=null, $nombre=null, $dni=null, $sexo=null, $empresa=null, $pais=null, $provincia=null, $localidad=null, $direccion=null, $email=null, $emailAlternativo=null, $emailFacebook=null, $telefono=null, $facebook=null, $twitter=null, $observaciones=null, $estado=null){
		$consulta = $this->db->query("UPDATE `cliente` 
									 SET `apellido` = ". $this->db->escape($apellido) .",
										 `nombre` = ". $this->db->escape($nombre) .",
										 `dni` = ". $this->db->escape($dni) .",
										 `sexo` = ". $this->db->escape($sexo) .",
										 `empresa` = ". $this->db->escape($empresa) .",
										 `pais` = ". $this->db->escape($pais) .",
										 `provincia` = ". $this->db->escape($provincia) .",
										 `localidad` = ". $this->db->escape($localidad) .",
										 `direccion` = ". $this->db->escape($direccion) .",
										 `email` = ". $this->db->escape($email) .",
										 `emailAlternativo` = ". $this->db->escape($emailAlternativo) .",
										 `emailFacebook` = ". $this->db->escape($emailFacebook) .",
										 `telefono` = ". $this->db->escape($telefono) .",
										 `facebook` = ". $this->db->escape($facebook) .",
										 `twitter` = ". $this->db->escape($twitter) .",
										 `observaciones` = ". $this->db->escape($observaciones) .",
										 `estado` = ". $this->db->escape($estado) ."
							         WHERE `cliente`.`idCliente` = " . $this->db->escape($idCliente) . " LIMIT 1");
		return($this->db->affected_rows());
	}
}
?>